package co.gov.aerocivil.siga.registrarquejaservicioaerolinea.servicio.impl;

import java.util.List;

import javax.ejb.EJB;
import javax.ejb.Stateless;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import co.gov.aerocivil.siga.comun.excepcion.LogicaExcepcion;
import co.gov.aerocivil.siga.comun.excepcion.SistemaExcepcion;
import co.gov.aerocivil.siga.comun.modelo.ServicioAbstracto;
import co.gov.aerocivil.siga.comun.modelo.administrador.Estado;
import co.gov.aerocivil.siga.comun.modelo.quejaaerolinea.QuejaAerolinea;
import co.gov.aerocivil.siga.comun.servicio.administrador.IEstadoServicio;
import co.gov.aerocivil.siga.comun.util.ConstantesValidacion;
import co.gov.aerocivil.siga.registrarquejaservicioaerolinea.servicio.IQuejaAerolineaServicio;

/**
 * 
 * @author lfcortes
 *
 */
@Stateless
public class QuejaAerolineaServicio extends ServicioAbstracto<Long, QuejaAerolinea> implements IQuejaAerolineaServicio {
	
	/** Constante que representa la instancia del Log. */
	private static final Logger LOG = LoggerFactory.getLogger(RegistrarQuejaAerolinea.class);
	
	/**
	 * Inyeccion EJB del servicio EstadoServicio
	 */
	@EJB
	private IEstadoServicio iEstadoServicio;

	/**
	 * Constructor
	 * 
	 */
	public QuejaAerolineaServicio() {
		super(QuejaAerolinea.class);
	}

	/**
	 * Obtener el estado de una queja
	 * @param codigoEstadoSolicitudRadicada Código Estado a buscar
	 * @return  Estado solicitud de queja por servicio de aerolinea
	 */
	@Override
	public Estado obtenerEstadoQuejaAerolinea(String codigoEstadoSolicitudRadicada) {
		LOG.info("Iniciando obtenerEstadoQuejaAerolinea| codigoEstadoSolicitudRadicada->{} ", codigoEstadoSolicitudRadicada);
		try {
			Estado estado = null;
			List<Estado> estados = iEstadoServicio.buscarEstadoPorTipoCodigo(codigoEstadoSolicitudRadicada);
			if (estados != null && !estados.isEmpty()) {
				estado = estados.get(0);
			}
			if (estado != null && estado.getId() != null) {
				LOG.info("Finalizando obtenerEstadoQuejaAerolinea| codigoEstadoSolicitudRadicada->{} ", estado);
				return estado;
			} else {
				throw new LogicaExcepcion(
						ConstantesValidacion.ACTUALIZAR_AUTORIZACION );
			}
		} catch (LogicaExcepcion e) {
			throw new SistemaExcepcion(e.getMessage(), e);
		}
	}

}
